Today's blog is a guest post by José Nieto, creator of upper/db. upper/db gives you tools for the most common operations with databases, and is now compatible with CockroachDB.
upper/db is a data access layer written in Go with ORM-like features. It's compatible with PostgreSQL, MySQL, SQLite, MongoDB, and now, CockroachDB! I am very pleased to announce that our CockroachDB adapter is now in beta and ready to be used!
Get the adapter the usual way:
go get github.com/upper/db/v4/adapter/cockroachdb
CockroachDB has two installation modes: secure and insecure. Secure mode has good defaults for production usage whilst insecure mode is more suited for local development and testing.
Here's an example on how to connect to a local insecure node using the cockroachdb
adapter:
package main
import (
"fmt"
"log"
"github.com/upper/db/v4/adapter/cockroachdb"
)
var settings = cockroachdb.ConnectionURL{
Host: "localhost",
Database: "bank",
User: "maxroach",
Options: map[string]string{
"sslmode": "disable",
},
}
func main() {
sess, err := cockroachdb.Open(settings)
if err != nil {
log.Fatal("cockroachdb.Open: ", err)
}
defer sess.Close()
fmt.Printf("connected to database %q\n", sess.Name())
}
Transactions
Transactions are essential when working with SQL databases as they allow you to represent several database-altering operations as a single unit.
upper/db
comes with client-side retry handling logic, whenever a transaction fails with a retryable error, upper/db
will wait a few milliseconds and try again until succeeding:
err = sess.Tx(func(tx db.Session) error {
// If a retryable error happens here, the transaction will be retried a few
// times (with exponential back-off).
return nil
})
if err != nil {
log.Fatal("Could not commit transaction: ", err)
}
If you want to configure the maximum number of transaction retries you can use the SetMaxTransactionRetries
method:
sess.SetMaxTransactionRetries(10)
Build a Go App: Hello World Example
See the official Hello World repo for a tutorial on how to build a Go app with CockroachDB and upper/db, or check out all methods for building Go apps with CockroachDB.